import Cookies from 'js-cookie';
import type {UserInfo} from "@store/userStore.ts";

// Token cookie名称
const TOKEN_KEY = 'Authorization';

/**
 * 从 cookie 中获取 token
 */
export function getToken(): string | undefined {
    return Cookies.get(TOKEN_KEY);
}

/**
 * 将 token 存储到 cookie
 * @param token JWT token
 * @param expires 过期时间（天）
 */
export function setToken(token: string, expires: number = 7): void {
    Cookies.set(TOKEN_KEY, token, { expires, sameSite: 'strict' });
}

/**
 * 从 cookie 中删除 token
 */
export function removeToken(): void {
    Cookies.remove(TOKEN_KEY);
}

/**
 * 解析 JWT token 获取用户信息
 * @param token JWT token
 * @returns 解析后的用户信息，解析失败则返回null
 */
export function parseToken(token: string): UserInfo | null {
    try {
        // JWT 格式: header.payload.signature
        const payload = token.split('.')[1];
        const decoded = JSON.parse(atob(payload));
        return decoded;
    } catch (error) {
        console.error('Token解析失败:', error);
        return null;
    }
}

/**
 * 从 cookie 中读取并解析 token
 * @returns 用户信息，无token或解析失败则返回null
 */
export function getUserFromToken(): UserInfo | null {
    const token = getToken();
    if (!token) return null;

    return parseToken(token);
}

/**
 * 验证token是否有效（未过期）
 * @returns 有效返回true，无效返回false
 */
export function isTokenValid(): boolean {
    const userInfo = getUserFromToken();
    if (!userInfo) return false;

    // 检查是否有过期时间字段
    if (userInfo.exp) {
        // JWT的exp是秒级时间戳
        const expTimestamp = userInfo.exp * 1000;
        return Date.now() < expTimestamp;
    }

    return true; // 如果没有exp字段，默认为有效
}

/**
 * 检查用户是否已登录
 * @returns 已登录返回true
 */
export function isAuthenticated(): boolean {
    return getToken() !== undefined && isTokenValid();
}

export default {
    getToken,
    setToken,
    removeToken,
    parseToken,
    getUserFromToken,
    isTokenValid,
    isAuthenticated
};
